# encoding:utf-8
class MyList:
    # 列表类简易实现
    def __init__(self) -> None:
        self.__capacity: int = 10    # 列表容量
        self.__nums: list[int] = [0] * self.__capacity    # 数组（存储列表元素）
        self.__size: int = 0    # 列表长度（即当前元素数量）
        self.__extend_ratio: int = 2    # 每次列表扩容的倍数

    def size(self) -> int:
        """
        获取列表长度（即当前元素数量）
        :return:
        """
        return self.__size

    def capacity(self) -> int:
        """
        获取列表容量
        :return:
        """
        return self.__capacity

    def get(self, index: int) -> int:
        """
        访问元素
        :param index:
        :return:
        """
        # 索引如果越界则抛出异常，下同
        if index < 0 or index >= self.__size:
            raise IndexError("索引越界")
        return self.__nums[index]

    def set(self, num: int, index: int) -> None:
        """
        更新元素
        :param num:
        :param index:
        :return:
        """
        if index < 0 or index >= self.__size:
            raise IndexError("索引越界")
        self.__nums[index] = num

    def add(self, num: int) -> None:
        """
        尾部添加元素
        :param num:
        :return:
        """
        # 元素数量超出容量时，触发扩容机制
        if self.__size == self.__capacity:
            self.extend_capacity()
        self.__nums[self.__size] = num
        # 更新元素数量
        self.__size += 1

    def insert(self, num: int, index: int) -> None:
        """
        中间插入元素
        :param num:
        :param index:
        :return:
        """
        if index < 0 or index >= self.__size:
            raise IndexError("索引越界")
        # 元素数量超出容量时，触发扩容机制
        if self.__size == self.__capacity:
            self.extend_capacity()
        # 索引 index 以及之后的元素都向后移动一位
        for i in range(self.__size - 1, index - 1, -1):
            self.__nums[i + 1] = self.__nums[i]
